import axios from "axios";
import { METHOD as HttpMethod } from "./val";
import md5 from "js-md5";
import { Base64 } from "js-base64";

axios.defaults.timeout = 1000 * 60 * window.CONFIG.httpTimeout; // 超时时间
// 添加请求拦截器
axios.interceptors.request.use((request: any) => {
    // 在发送请求之前做些什么
    // 请求参数
    const params = request.data;
    const paramsStr = JSON.stringify(params);
    // console.log("paramsStr=", paramsStr);
    // base64之后的请求参数
    const Base64Params = Base64.encode(paramsStr);
    // 计算sign
    const time = new Date().getTime();
    const timeStr = time.toString();
    const encodeStr = `${md5(timeStr)}.${Base64Params}.${timeStr}`;
    // console.log("encodeStr=", encodeStr);
    let sign = `${md5(Base64.encode(encodeStr))}.${timeStr}`;
    // console.log("sign=", sign);
    sign = Base64.encode(sign);
    // console.log("sign64=", sign);
    // 如果是get和delete请求，就把参数放到headers里的body里面
    if (request.method === HttpMethod.get) {
        /*if (config.debug) {
            console.log("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            console.log("请求接口:", request.url);
            console.log("请求类型:", request.method);
            console.log("请求参数:");
            console.log(params);
            console.log("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
        }*/
        const paramsKey = "Body";
        request.headers.common[paramsKey] = Base64Params; // 添加请求参数
    }
    // const tokenKey = "Authorization";
    // request.headers.common[tokenKey] = storage.token.Get(); // 添加token
    const signKey = "Sign";
    request.headers.common[signKey] = sign; // 添加签名
    return request;
}, (error: any) => {
    // 对请求错误做些什么
    // console.log("请求错误",error);
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use((response: any) => {
    // 对响应数据做点什么
    /*if (response.config.method === HttpMethod.get) {
        if (config.debug) {
            console.log("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            console.log("请响接口:", response.config.url);
            console.log("请求类型:", response.config.method);
            console.log("响应数据:");
            console.log(response.data);
            console.log("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
        }
    }*/
    return response;
}, (error: any) => {
    // 对响应错误做点什么
    return Promise.reject(error);
});
